The cost and complexity of managing IT infrastructure continues to grow rapidly. Several factors contribute to this trend. First, IT infrastructures today are based on a distributed network of heterogeneous platforms and applications. In such an environment, resources, their capabilities, and behavior, are represented differently. They are therefore harder to compare and reason about. Interdependencies between resources, in which one resource's behavior is affected by another one, are not well represented or understood. Administrative personnel need to exercise knowledge of every platform, application and network appliance used, as well of how they can be assembled together for a particular purpose.
Second, in a highly competitive business environment, businesses must respond quickly to market changes. Such changes may impose new requirements on the IT infrastructure, such as supporting new computing services or applications, upgrading resources, incorporating new ones, or changing the network structure. Realizing these changes is often a manual, tedious, and error prone process. In particular, as configuration changes are made, new IT management processes need to be defined, and existing processes may need to be updated.
Finally, service providers are moving towards an SLA-based service delivery model in which the set of resources allocated to a customer is dynamically adjusted based on workload and performance. Reconfiguring infrastructure resources dynamically in response to customer needs demands prompt attention from administrative personnel increasing operational cost. Therefore, a clear requirement of businesses today is to reduce the cost of maintaining an IT infrastructure by reducing the overall complexity and the level of required human operation.
A common approach to addressing these challenges is incorporating automation into the operation of the system. Common tasks such as adding a server to a computing service when the load increases, or installing software on a server, are automated, thereby reducing human involvement, the time to complete the task, and the probability for human errors. Workflows are often used as a vehicle for automation because they are particularly well suited for coordinating the execution of a set of activities that are long lived, tracking progress of activities, and incorporating human interaction where necessary. Provisioning engines, including a workflow engine, and some useful set of workflows organized in some structured way, are emerging as a means to achieve the goal of reducing the cost through automation.
Automating the operation of the infrastructure, even by utilizing a provisioning engine, does not fully address the aforementioned challenges. Automation procedures are often specific to a particular infrastructure, computing environment, and service. When coding an automation procedure it is impossible to predict all future changes in the service or infrastructure. Therefore statically defined automation procedures are likely to require change. For example, changing from a one-tier to a two-tier architecture, or adding resources with new capabilities, can require a complex re-implementation of the automation procedures. This task is further complicated by the many interdependencies between resources that are often implicit, by the combinatorial large number of possible allocations and configurations of a given set of resources, by the variety of possible computing services with different requirements, and by the many and rapidly evolving types of hardware and software resources. Therefore there is a need to be able to describe a computing service independent of a particular infrastructure, to describe the resources in a service provider's infrastructure and their interdependencies, and to automatically generate the instructions to provision and manage the service on the resources in the infrastructure.